const dgram = require('dgram');

// ===========================
// 🔧 配置区
// ===========================
const TARGET_PORT = 7876; // 目标设备监听的 UDP 端口
const BROADCAST_IP = '255.255.255.255'; // 通用局域网广播地址（兼容大多数路由器）
// 或者你可以用具体网段广播，如 '192.168.1.255'（更精准，但需要知道网段）

const UDP_MESSAGE = 'lgcloud'; // 你要发送的广播探测内容

// ===========================
// 🚀 广播扫描函数
// ===========================
function broadcastScanLAN() {
  const socket = dgram.createSocket('udp4');

  // 🔧 必须设置此选项，否则不能往 255.255.255.255 发广播包
  socket.setBroadcast(true);

  // 监听是否有设备回复（如果对方有回复逻辑）
  socket.on('message', (msg, rinfo) => {
    const responseText = msg.toString();
    console.log(`[+] 📥 收到来自 ${rinfo.address}:${rinfo.port} 的回复: "${responseText}"`);
    console.log(`[✓] ✅ 设备 ${rinfo.address} 的端口 ${TARGET_PORT} 有服务响应！`);
  });

  // 绑定一个随机端口，用于接收可能的回复
  socket.bind(0, () => {
    console.log(`[*] 🟢 UDP Socket 已绑定，准备向广播地址 ${BROADCAST_IP} 发送探测消息...`);
  });

  // 发送广播包
  socket.send(
    UDP_MESSAGE,                    // 消息内容（字符串）
    TARGET_PORT,                    // 目标端口
    BROADCAST_IP,                   // 广播地址
    (err) => {
      if (err) {
        console.error(`[-] ❌ 广播发送失败:`, err.message);
      } else {
        console.log(`[+] 📤 已发送 UDP 广播消息 "${UDP_MESSAGE}" 到 ${BROADCAST_IP}:${TARGET_PORT}`);
        console.log(`[🔍] 等待局域网内设备（监听 ${TARGET_PORT} 端口）响应...`);
      }
    }
  );

  // 可选：几秒后关闭 socket（演示用）
  setTimeout(() => {
    console.log('[*] 🔚 UDP 广播扫描完成（发送 lgcloud 到 7876 端口）');
    socket.close();
  }, 5000); // 5 秒后关闭，可根据需要调整
}

// ===========================
// ▶️ 启动广播扫描
// ===========================
broadcastScanLAN();
